有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何让Spring数据存储库中的默认方法命中缓存?

这与这个问题有关,它表明Spring数据存储库中的默认方法不会命中缓存: Will default methods in Spring Data repositories hit caches on other methods?

我有一个缓存的方法:

    @Cacheable("codeType-findIdByCode")
    default Long findIdByCodeRequired(final String code) {
        if (StringUtils.isBlank(code)) {
            throw new DataCheckException(MSG_CODE_REQUIRED, getEntityMessageArgument());
        }

        return findIdByCode(code).orElseThrow(notFound(code));
    }

我希望此默认方法命中缓存:

    default T getReferenceByCodeRequired(final String code) {
        return getOne(findIdByCodeRequired(code));
    }

请注意,我尝试了此机制,但它不起作用:

    default T getReferenceByCodeRequired(final String code) {
        @SuppressWarnings("unchecked")
        final CodeTypeRepository<T> codeTypeRepo = (CodeTypeRepository<T>) AopContext.currentProxy();
        return getOne(codeTypeRepo.findIdByCodeRequired(code));
    }

如何让它在不将默认方法移出存储库的情况下命中缓存

将其保留在存储库中的原因:它是一个包含大量子存储库的父存储库。getReferenceByCodeRequired的服务方法版本需要接受子存储库本身,以便组合两个存储库调用(findIdByCodeRequiredgetOne

另外,我不想将@Cacheable放在getReferenceByCodeRequired方法上,因为我试图避免缓存实体


共 (0) 个答案